// packageA/pages/cardInterval/cardInterval.js
import CommonService from '../../../utils/service/commonService.js';
import Toast from '../../../miniprogram_npm/@vant/weapp/toast/toast';

Page({

  /**
   * 页面的初始数据
   */
  data: {
    //列表
    list: [],
    //无数据
    showNothing: false,
    //搜索关键词
    searchValue: '',
    //已选列表
    listMap: {},   
    //定位类型
    type: [],
    //间隔时间
    showWIFI: false,
    showGPS: false,
    //全选
    checkedAll: false,
    //项目选择框
    showProject:false,
    //项目选择数据
    projectList:[],
    //项目id
    projectId:null,
    //项目名称
    projectName:'部门',
    //过滤LBS
    lbs: null
  },

  /**
   * 生命周期函数--监听页面加载
   */
  onLoad(options) {
    this.setData({
      //在这里给map赋值，避免后面操作时set方法不可用
      listMap: new Map()
    })

    //获取列表数据
    this.getList();
  },

  //获取列表数据
  getList(){
    Toast.loading({
      duration: 0,
      forbidClick: true,
      message: '加载中...'
    });

    let param={};

    //模糊查询
    if(this.data.searchValue){
      param.keyword = this.data.searchValue;
    }

    //查询某个部门
    if(this.data.projectId){
      param.depart = [this.data.projectId];
    }

    CommonService.findPersonnelAll(param).then(res => {
      Toast.clear();    
      if(res.data.data && res.data.data.result && res.data.data.result.length) {
        let result=res.data.data.result;
        console.log('人员列表');
        console.log(result);

        //选中状态
        let listMap=this.data.listMap;
        result.forEach(item => {
          if(listMap.get(item.imei)){
            item.checked=true;
          }
        });

        this.setData({
          list: result
        })   
      }else{
        this.setData({
          showNothing: true
        })
        
      }
    }).catch((error) => {
      this.setData({
        showNothing: true
      })
    })
  },

  //刷新列表
  refreshListAndPage(){
    this.setData({
      list: [],
      showNothing: false,
      checkedAll: false
    })
    this.getList();
  },

  //获取搜索词
  onChangeSearch(e) {
    this.setData({
      searchValue: e.detail
    })
    this.refreshListAndPage();
  },

  //选择列表
  onChangeCheck({currentTarget}) {
    let detail=currentTarget.dataset.detail;
    let list=this.data.list;
    let listMap=this.data.listMap;

    list.forEach(item => {
		  if(item.imei==detail.imei){
        //点击复选框时切换选中
        item.checked=!item.checked;
        if(item.checked){
          //选中的放入已选列表，利用map避免重复
          listMap.set(item.imei,item);
        }else{
          //未选中的从map中删除
          listMap.delete(item.imei);
        }
      }
    });
    
    //列表是否全被选中了
    let flag=list.every(item=>{
      return item.checked;
    });

    //是否选中全选
    if(flag){
      this.setData({
        checkedAll: true
      })
    }else{
      this.setData({
        checkedAll: false
      })
    }

    this.setData({
      list: list,
      listMap: listMap,
      disabled: false
    })
  },

  //全选
  onChangeAll(event){
    let list=this.data.list;
    let listMap=this.data.listMap;

    list.forEach(item => {
      //列表的复选框与全选的值一致
      item.checked=event.detail;
      if(event.detail){
        //选中的放入已选列表
        listMap.set(item.imei,item);
      }else{
        //未选中的从map中删除
        listMap.delete(item.imei);
      }
    });

    this.setData({
      checkedAll: event.detail,
      list: list,
      listMap: listMap,
      disabled: false
    })
  },

  //选择定位类型
  onChangeType(event) {
    this.setData({
      type: event.detail,
      disabled: false
    })

    //显示WIFI间隔
    if(event.detail.indexOf('WIFI')!=-1){
      this.setData({
        showWIFI: true
      })
    }else{
      this.setData({
        showWIFI: false
      })
    }

    //显示GPS间隔
    if(event.detail.indexOf('GPS')!=-1){
      this.setData({
        showGPS: true
      })
    }else{
      this.setData({
        showGPS: false
      })
    }
  },
  
  //输入时
  clearMessage(e) {
    this.setData({
      disabled: false
    })
  },

  //提交表单##
  confirmForm(e){
    console.log(e);
    this.setData({
      disabled: true
    })

    let detail=e.detail.value;
    let td=this.data;
    let listMap=td.listMap;
    let paramObj={};  
   
    //工牌必选
    if(listMap.size==0){
      Toast.fail('未选择人员');
      return;
    }

    //类型为WIFI
    if(detail.WIFI){
      let wifiTime=detail.wifiTime.trim();
      //是否是数字且在范围内
      if(wifiTime){
        if(wifiTime>=60 && wifiTime<=36000){
          paramObj.WIFI=parseInt(wifiTime);
        }else{
          Toast.fail('请输入60至36000之间数字');
          return;
        }
      }else{
        Toast.fail('请输入WIFI间隔时间');
        return;
      }
    }

    //类型为GPS
    if(detail.GPS){
      let gpsTime=detail.gpsTime.trim();
      if(gpsTime){
        if(gpsTime>=60 && gpsTime<=36000){
          paramObj.GPS=parseInt(gpsTime);
        }else{
          Toast.fail('请输入60至36000之间数字');
          return;
        }  
      }else{
        Toast.fail('请输入GPS间隔时间');
        return;
      }
    }

    //过滤LBS（单选框获取的值为字符串）
    if(td.lbs){
      if(td.lbs=='true'){
        paramObj.filterLBS=true;
      }else{
        paramObj.filterLBS=false;
      }
    }

    //如果只选了人员，别的没选择
    if(JSON.stringify(paramObj)=='{}'){
      Toast.fail('请至少设置一个参数');
      return;
    }
    
    //工牌列表
    let list=[];
    listMap.forEach(item => { 
      let obj={
        imei: item.imei,
        devId: item.devId,
        hitId: item.hitId
      };
      //合并对象（类型和时间）
      Object.assign(obj,paramObj);
      list.push(obj);
    });

    let param={
      data: list
    }

    console.log(param);
    return;

    //避免表单重复提交
    Toast.loading({
      duration: 0,
      forbidClick: true,
      message: '数据提交中...'
    });

    CommonService.setUpperInterval(param).then(res=>{
      this.setData({
        disabled: false
      })
      if(res.statusCode == 200 && res.data.success == true){
        Toast.success('成功');

        //清空数据并更新列表
        setTimeout(() => {
          this.setData({
            type: [],
            showWIFI: false,
            showGPS: false,
            wifiTime: '',
            gpsTime: '',          
            listMap: new Map(),
            lbs: null
          })
          this.refreshListAndPage();
        }, 1000);

      }else{
        Toast.fail('操作失败');
      }
    }).catch((error) => {
      Toast.fail('操作失败');
    })
  },
  
  //显示项目
  onShowProject(){
    this.setData({
			showProject: true
    })
    this.getProjectList();
  },

  //查询项目
  getProjectList(){
    this.setData({
      projectList: []
    })

    let param = {
      isAuth: true,
      className: 'depart',
      data: {
        searchAll: true,
        selectFields: ['id','name']
      }
    }

    //模糊查询
    if(this.data.valueSearchProject){
      param.data.name='%' + this.data.valueSearchProject + '%';
    }

    CommonService.goFindList(param).then(res=>{
      if(res.data.data && res.data.data.result && res.data.data.result.length){
        let result=res.data.data.result;
        let arr=[];

        result.forEach(item => {
          arr.push({
            text:item.name,
            id:item.id
          });
        });

        this.setData({
          projectList: arr
        })
      }
    }).catch((error) => {
    })
  },

  //隐藏项目
  onCloseProject(){
    this.setData({
      showProject: false,
      valueSearchProject:''
    })
  },

  //确认项目
  onConfirmProject(e){
    this.setData({
      projectId:e.detail.value.id,
      projectName:e.detail.value.text
    })
    this.onCloseProject();
    this.refreshListAndPage();
  },

  //搜索项目
  onChangeProjectVal(e){
    this.setData({
      valueSearchProject: e.detail
    })
    this.getProjectList();
  },

  //取消选择项目
  onCancelProject(e){
    this.setData({
      projectId: null,
      projectName: '部门'
    })
    this.onCloseProject();
    this.refreshListAndPage();
  },

  //过滤LBS
  onChangeLbs(event) {
    this.setData({
      lbs: event.detail,
      disabled: false
    })
  },

  /**
   * 生命周期函数--监听页面初次渲染完成
   */
  onReady() {

  },

  /**
   * 生命周期函数--监听页面显示
   */
  onShow() {

  },

  /**
   * 生命周期函数--监听页面隐藏
   */
  onHide() {

  },

  /**
   * 生命周期函数--监听页面卸载
   */
  onUnload() {

  },

  /**
   * 页面相关事件处理函数--监听用户下拉动作
   */
  onPullDownRefresh() {

  },

  /**
   * 页面上拉触底事件的处理函数
   */
  onReachBottom() {

  },

  /**
   * 用户点击右上角分享
   */
  onShareAppMessage() {

  }
})
